فرض کن یه هتل بزرگ داری که توش کلی کارمند و مهمان رفتوآمد دارن. برای اینکه بدونی چه اتفاقاتی توی هتل میافته، باید یه دفتر ثبت وقایع داشته باشی که توش همه چیز رو یادداشت کنی: کی وارد شده، کی خارج شده، کجا مشکل پیش اومده و ... توی لینوکس، این دفتر رو لاگ (Log) مینامند. این جلسه بهت یاد میده چطور لاگها رو مدیریت کنی، بخوانی و تحلیل کنی.
قبل از ورود به بحث لاگها، باید تفاوت بین پردازش (Process) و دامون (Daemon) را بدانید:
| ویژگی | Process | Daemon |
|---|---|---|
| تعریف | یک برنامه در حال اجرا | یک سرویس پسزمینه که به طور مداوم اجرا میشود |
| اتصال به ترمینال | معمولاً به ترمینال متصل است | از ترمینال جدا است (detached) |
| مدت زمان | معمولاً کوتاهمدت | طولانیمدت (معمولاً تا زمان خاموشی سیستم) |
| نمونه | ls, cat, grep |
sshd, cron, syslogd |
d در انتهای نام خود شناخته میشوند (مثل sshd, cron, syslogd).یکی از مهمترین کارهای هر مدیر سیستم، بررسی وضعیت سیستم از طریق لاگها است. لاگها به شما کمک میکنند:
برای کار با دامونها (سرویسهای پسزمینه) در لینوکس، به لاگها نیاز دارید تا بتوانید وضعیت آنها را بررسی کنید.
در لینوکس، سه دسته اصلی لاگ وجود دارد که در تصویر به آنها اشاره شده است:
هر برنامه میتواند لاگهای خود را در فایلهای جداگانه ذخیره کند. معمولاً این فایلها در /var/log/ قرار دارند.
/var/log/nginx/access.logیک سیستم متمرکز برای جمعآوری لاگها از برنامههای مختلف. این سیستم استاندارد قدیمی لینوکس است.
rsyslog (نسخه مدرن syslog)سیستم لاگگیری مدرن systemd که لاگها را به صورت باینری و ساختاریافته ذخیره میکند.
journalctlsyslog در سال ۱۹۸۰ توسط Eric Allman (برای پروژه sendmail) ایجاد شد و به سرعت به عنوان یک پروتکل استاندارد لاگگیری در لینوکس پذیرفته شد.
| شماره | Facility | توضیح |
|---|---|---|
| 0 | kern |
پیامهای هسته سیستم |
| 1 | user |
پیامهای رویدادهای کاربر |
| 2 | mail |
پیامهای برنامه ایمیل |
| 3 | daemon |
پیامهای برنامههای سیستمی که در پسزمینه اجرا میشوند |
| 4 | auth |
پیامهای امنیتی یا احراز هویت |
| 5 | syslog |
پیامهای خود برنامه لاگگیری |
| 6 | lpr |
پیامهای چاپگر |
| 7 | news |
پیامهای برنامه news |
| 8 | uucp |
پیامهای برنامه Unix-to-Unix copy |
| 9 | cron |
پیامهای زمانبندی cron |
| 10 | authpriv |
پیامهای امنیتی (محافظتشده) |
| 11 | ftp |
پیامهای برنامه FTP |
| 12 | ntp |
پیامهای برنامه NTP |
| 13 | security |
پیامهای حسابرسی (Audit) |
| 14 | console |
پیامهای هشدار کنسول |
| 15 | solaris-cron |
پیامهای cron در Solaris |
kern (هسته)، user (کاربر)، mail (ایمیل)، daemon (سرویسهای پسزمینه) و auth (امنیت).
rsyslog نسخه مدرن و پیشرفته syslog است که در اکثر توزیعهای امروزی استفاده میشود.
/etc/rsyslog.conf/etc/rsyslog.d/ وجود دارد.@ برای UDP و @@ برای TCP)./etc/rsyslog.conf
در سیستمهای شلوغ، فایلهای لاگ به سرعت بزرگ میشوند و فضای دیسک را پر میکنند. برای مدیریت این مشکل، از logrotate استفاده میشود که بهصورت خودکار:
فایل اصلی پیکربندی: /etc/logrotate.conf
فایلهای جداگانه برای هر برنامه: /etc/logrotate.d/
توضیح: این تنظیمات نشان میدهد که فایل /var/log/syslog هر هفته چرخانده شود، ۷ نسخه قبلی نگهداری شود، فایلهای قدیمی فشرده شوند و اگر فایل خالی است، چرخش انجام نشود.
/etc/logrotate.conf
systemd که وظیفه مدیریت سرویسها را دارد، یک قابلیت لاگگیری به نام journal نیز دارد که لاگهای سرویسهای مختلف را ذخیره و نمایش میدهد.
/etc/systemd/journald.conf
journalctl ابزار خط فرمان برای مشاهده و مدیریت لاگهای systemd journal است.
| گزینه کوتاه | گزینه بلند | توضیح |
|---|---|---|
-a |
--all |
نمایش همه فیلدهای داده (شامل کاراکترهای غیرقابل چاپ) |
-e |
--pager-end |
رفتن به انتهای لاگها |
-k |
--dmesg |
فقط نمایش لاگهای هسته (معادل dmesg) |
-n number |
--lines=number |
نمایش آخرین number لاگ |
-r |
--reverse |
نمایش لاگها به ترتیب معکوس (جدیدترین اول) |
-S date |
--since=date |
نمایش لاگها از تاریخ مشخص (فرمت: YYYY-MM-DD:HH:MM:SS) |
-U date |
--until=date |
نمایش لاگها تا تاریخ مشخص |
-u unit |
--unit=unit |
فقط نمایش لاگهای یک سرویس خاص |
-p priority |
--priority=priority |
فقط نمایش لاگهای با اولویت مشخص (emerg, alert, crit, err, warning, notice, info, debug) |
-f |
--follow |
دنبال کردن لاگها (مشابه tail -f) |
توضیح: نمایش لاگهای سرویس SSH.
توضیح: نمایش ۱۰ لاگ آخر به ترتیب معکوس (جدیدترین اول).
توضیح: نمایش لاگهای امروز تا الان.
توضیح: فقط نمایش لاگهای با اولویت err (خطا) و بالاتر.
journalctl بدون آرگومان، همه لاگها را از ابتدا تا انتها نمایش میدهد. برای مشاهده آسانتر، از گزینههای -n، -r و -u استفاده کنید.
لاگهای journal میتوانند فضای زیادی اشغال کنند. برای مدیریت این فضا، از دستورات زیر استفاده کنید:
توضیح: نمایش حجم اشغالشده توسط لاگهای journal.
توضیح: کاهش حجم لاگها به ۳۰۰ مگابایت (لاگهای قدیمی حذف میشوند).
توضیح: حذف لاگهای قدیمیتر از ۲ روز.
journalctl --vacuum-size و journalctl --vacuum-time استفاده کنید.
با استفاده از systemd-cat میتوانید پیامهای خود را به journal ارسال کنید.
توضیح: این دستور پیام را به journal ارسال میکند.
توضیح: مشاهده پیام ارسالشده در journal.
systemd-cat برای ارسال پیام به journal از خط فرمان استفاده میشود.
/etc/rsyslog.conf/etc/logrotate.conf-u (سرویس)، -n (تعداد)، -r (معکوس)، -S (از تاریخ)، -U (تا تاریخ)، -p (اولویت)--vacuum-size و --vacuum-time